package com.smh.genericity.fanxingRemove;

/**
 * @description: 调用泛型方法时，可以指定泛型，也可以不指定泛型。
 * @author: shenmhk
 * @create: 2020-10-23 14:21
 */
public class Test02 {

    //这是一个简单的泛型方法
    public static <T> T add(T x,T y){
        return y;
    }

    public static void main(String[] args) {

        /**
         * 不指定泛型的时候
         */
        int i = Test02.add(1,2);//这两个参数都是Integer，所以T为Integer类型
        Number f = Test02.add(1,1.2);//这两个参数一个是Integer，以风格是Float，所以取同一父类的最小级，为Number
        Object o = Test02.add(1,"asd");//这两个参数一个是Integer，以风格是Float，所以取同一父类的最小级，为Object
        System.out.println("i = " + i);
        System.out.println("f = " + f);
        System.out.println("o = " + o);

        /**
         * 指定泛型的时候
         */
        int a = Test02.<Integer>add(1,2);//指定了Integer，所以只能为Integer类型或者其子类
//        int b = Test02.<Integer>add(1,2.2);//编译错误，指定了Integer，不能为Float
        Number c = Test02.<Number>add(1,2.2);//指定为Number，所以可以为Integer和Float
        System.out.println("a = " + a);
        System.out.println("c = " + c);

    }
}
